﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using vudu.Presentacion.Contrato.VU_03_Gestionar_Pensum_por_Escuela;
using vudu.Logica.Fachada;
using vudu.ClasesDominio;
using System.Web.UI.WebControls;
using System.Data;

namespace vudu.Presentacion.Presentador.VU_03_Gestionar_Pensum_por_Escuela
{
    public class PresentadorEliminarPensum
    {
        #region Atributos privados

        private IContratoEliminarPensum _vista;
        private EnlaceLogico _fachada;
        private Escuela _usuarioEscuela;
        private string _rol;

        #endregion

        #region Constructor

        public PresentadorEliminarPensum(IContratoEliminarPensum vista)
        {
            _vista = vista;
            _fachada = (EnlaceLogico)_vista.Sesion["Fachada"];
            if (_fachada != null)
                _usuarioEscuela = (Escuela)_fachada.RolActual;
            _rol = (string)_vista.Sesion["TipoRol"];
        }

        #endregion

        #region set y get
        
        public Escuela UsuarioEscuela
        {
            get { return _usuarioEscuela; }
            set { _usuarioEscuela = value; }
        }

        public string Rol
        {
            get { return _rol; }
            set { _rol = value; }
        }

        public EnlaceLogico Fachada
        {
            get { return _fachada; }
            set { _fachada = value; }
        }

        public IContratoEliminarPensum Vista
        {
            get { return _vista; }
            set { _vista = value; }
        }

        #endregion

        

        #region Metodos

        public void MostrarNombreUsuario()
        {
            Escuela esc = (Escuela)_fachada.RolActual;
            _vista.Actor.Text = _rolUsuario + _separador + esc.NombreEscuela;
        }

        /// <summary>
        /// Metodo encargadodemanejar la paginacion del gridview de pensums
        /// </summary>
        /// <param name="e"></param>
        public void Paginacion(GridViewPageEventArgs e)
        {
            this._vista.TablaPensum.PageIndex = e.NewPageIndex;

            this.ImprimirListaPensums();
        }

        private int Diferencia(int totalFilas)
        {
            int diferencia = 0;
            if (totalFilas < _numeroFilas)
            {
                diferencia = _numeroFilas - totalFilas;
            }
            return diferencia;
        }

        private void CargarTablaPensums(List<Pensum> pensums)
        {
            
            DataTable table = new DataTable();
            table.Columns.Add("Periodo Academico", typeof(string));//la resta entre la fecha de inicio y la fecha fin
            table.Columns.Add("Codigo", typeof(string));//id del pensum
            
            int diferencia = Diferencia(pensums.Count);

            foreach (Pensum pensum in pensums)
            {   
                int idPensum = pensum.IdPensum;
                if (idPensum != 0)
                {
                    table.Rows.Add("( " + pensum.FechaInicio.Day + "/" + pensum.FechaInicio.Month + "/" + pensum.FechaInicio.Year +
                                  " - " + pensum.FechaFin.Day + "/" + pensum.FechaFin.Month + "/" + pensum.FechaFin.Year + " )", pensum.IdPensum);
                    
                }
            }
            this._vista.TablaPensum.DataSource = table;
            this._vista.TablaPensum.DataBind();

        }

        public void ImprimirListaPensums()
        {
            List<Pensum> listaPensums = new List<Pensum>();
            if (_usuarioEscuela != null)
            {
                listaPensums = _fachada.ConsultarPensumsInactivosDeEscuela(_usuarioEscuela, _tipoConsulta);
            }
            if (listaPensums.Count == 0)
            {
                _vista.Mensaje.Text = _noHayPensum;
                _vista.Mensaje.CssClass = _styleError;
                _vista.Mensaje.Visible = true;
            }
            else
                this.CargarTablaPensums(listaPensums);
        }


        public void EliminarUnPensum()
        {
            int seleccion = 0;
            bool resultado;
            Pensum pensumSeleccionado = new Pensum();
            List<Pensum> listaPensums = new List<Pensum>();
            seleccion = (_vista.TablaPensum.PageIndex * 8) + _vista.TablaPensum.SelectedIndex;
            listaPensums = _fachada.ConsultarPensumsInactivosDeEscuela(_usuarioEscuela, _tipoConsulta);
            if (seleccion < listaPensums.Count)
                pensumSeleccionado = listaPensums[seleccion];
            resultado = _fachada.EliminarPensumInactivo(pensumSeleccionado.IdPensum);
            this.EscribirMensaje(resultado);
            this.ImprimirListaPensums();
        }

        private void EscribirMensaje(bool resultado)
        {
            if (resultado)
            {
                _vista.Mensaje.Text = _mensajeConfirmacion;
                _vista.Mensaje.CssClass = _styleConfirmacion;
                _vista.Mensaje.Visible = true;
            }
            else
            {
                _vista.Mensaje.Text = _mensajeError;
                _vista.Mensaje.CssClass = _styleError;
                _vista.Mensaje.Visible = true;
            }
        }

        #endregion

        #region Constantes

        private const int _numeroFilas = 8;
        private const int _tipoConsulta = 2;
        private const string _mensajeConfirmacion = "El pensum se elimino con éxito";
        private const string _mensajeError = "Operacion Fallida: No se pudo eliminar el pensum";
        private const string _noHayPensum = "No hay pensums inactivos para eliminar";
        private const string _styleConfirmacion = "transaccionExitosa";
        private const string _styleError = "transaccionFallida";
        private const string _separador = ": ";
        private const string _rolUsuario = "Escuela";

        #endregion
    }
}